package org.domain.sigepac.Entity;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Transient;

import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
import org.hibernate.validator.Length;
import org.hibernate.validator.NotNull;


@Entity
@Table(name="tb_cidade")
public class Cidade extends EntidadeAbstrata {
	
	private static final long serialVersionUID = -815044983575808482L;
	
	@Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
	
	@Column(name = "nome", nullable = false, length = 100)
	@NotNull
	@Length(max = 100)	
	private String nome;
	
	@Enumerated(EnumType.ORDINAL)
	@Column(name = "uf", nullable = false)
	@NotNull
	private Uf uf;
	
	
	@OneToMany(fetch = FetchType.LAZY, mappedBy = "cidade")
	@Cascade({CascadeType.ALL, CascadeType.DELETE_ORPHAN})
	private Set<Turma> turmas = new HashSet<Turma>(0);
	
	@OneToMany(fetch = FetchType.LAZY, mappedBy = "cidade")
	@Cascade({CascadeType.ALL, CascadeType.DELETE_ORPHAN})
	private Set<Campus> campi=new HashSet<Campus>(0);
	
	@Transient
	private Set<Curso> cursos;
	
	public Set<Turma> getTurmas() {
		return turmas;
	}

	public void setTurmas(Set<Turma> turmas) {
		this.turmas = turmas;
	}

	public Set<Curso> getCursos() {
		if(cursos==null){
			cursos=new HashSet<Curso>(0);
			for (Turma turma : getTurmas()) {
				cursos.add(turma.getCurso());
			}
		}
		return cursos;
	}

	public void setCursos(Set<Curso> cursos) {
		this.cursos = cursos;
	}
	
	
	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	
	

	public Set<Campus> getCampi() {
		return campi;
	}

	public void setCampi(Set<Campus> campi) {
		this.campi = campi;
	}

	public Serializable getId() {
		// TODO Auto-generated method stub
		return id;
	}

	public Uf getUf() {
		return uf;
	}
	public void setUf(Uf uf) {
		this.uf = uf;
	}
}
